import java.util.*;
/*
有边数限制的最短路
给定一个 n个点 m条边的有向图，图中可能存在重边和自环， 边权可能为负数。
请你求出从 1号点到 n号点的最多经过 k条边的最短距离，如果无法从 1号点走到 n号点，输出 impossible。
注意：图中可能 存在负权回路 。

输入格式
第一行包含三个整数 n,m,k。
接下来 m行，每行包含三个整数x,y,z，表示存在一条从点 x到点 y的有向边，边长为 z。
点的编号为 1∼n。

输出格式
输出一个整数，表示从 1号点到 n号点的最多经过 k条边的最短距离。
如果不存在满足条件的路径，则输出 impossible。

数据范围
1≤n,k≤500,1≤m≤10000,1≤x,y≤n，
任意边长的绝对值不超过10000。

输入样例：
3 3 1
1 2 1
2 3 1
1 3 3

输出样例：
3
 */

public class Main {
    static int n, m, k;
    static int[] distance = new int[505];
    static int[] backup;

    static class Edge {
        int x, y, z;
    }

    static Edge[] edges = new Edge[10010];

    static void bellmanFord() {
        //初始化
        for (int i = 0; i <= n; i++) {
            distance[i] = 0x3f3f3f3f;
        }
        distance[1] = 0;
        //算法主体
        for (int i = 1; i <= k; i++) {
            backup = distance.clone();
            for (int j = 1; j <= m; j++) {
                int x = edges[j].x, y = edges[j].y, z = edges[j].z;
                distance[y] = Math.min(distance[y], backup[x] + z);
            }
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        m = sc.nextInt();
        k = sc.nextInt();

        for (int i = 1; i <= m; i++) {
            edges[i] = new Edge();
            int x = sc.nextInt(), y = sc.nextInt(), z = sc.nextInt();
            edges[i].x = x;
            edges[i].y = y;
            edges[i].z = z;
        }
        bellmanFord();
        if (distance[n] > 0x3f3f3f3f / 2) System.out.println("impossible");
        else {
            System.out.println(distance[n]);
        }
    }
}